package com.fjsh.config;

import com.netflix.hystrix.strategy.HystrixPlugins;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;

/**
 * 自定义熔断策略，解决开启熔断后Feign调用获取不到请求上下文的问题
 *
 * 简单粗暴的解决方式：hystrix.command.default.execution.isolation.strategy=SEMAPHORE
 *
 * 但是官方推荐是并发策略
 * 目前还未解决，问题点：请求进来到接口时，此时请求上下文是有当前请求信息的，
 * 但是远程调用Feign接口时，或者通过自定义的策略类去重新设置请求上下文时，
 * RequestContextHolder.getRequestAttributes() 此时获取的请求信息是空的，
 * 具体丢失原因需断点测试，去确认是在哪个位置丢失的
 */
@Configuration
public class HystrixConfig{
    @PostConstruct
    public void init(){
        HystrixPlugins.getInstance().registerConcurrencyStrategy(
            new CustomHystrixConcurrencyStrategy()
        );
    }
}